package com.tianzmp.ttq.admin.service;

import com.tianzmp.ttq.admin.controller.reqDto.UserInfoPageList;
import com.tianzmp.ttq.admin.controller.reqDto.UserInfoUpdateDTO;
import com.tianzmp.ttq.admin.controller.reqDto.UserMenusDTO;
import com.tianzmp.ttq.admin.controller.resDto.MenuTree;
import com.tianzmp.ttq.admin.controller.resDto.UserInfoPageListResponse;
import com.tianzmp.ttq.admin.controller.resDto.UserInfoGetById;
import com.tianzmp.ttq.admin.entity.PageInfo;
import com.tianzmp.ttq.admin.entity.UserInfo;

import java.util.List;

/**
 * <p>
 * 用户基本数据表 服务类
 * </p>
 *
 * @author ttq
 * @since 2022-07-26
 */
public interface IUserInfoService {

    /**
     * <p>
     *  exit pageInfo user
     * </p>
     * @return list
     */
    public List<UserInfo> list();

    /**
     * <pre>
     *     select pageInfo user list
     * </pre>
     * @param dto      当前页条数
     * @return pageInfo
     */
    public PageInfo<List<UserInfoPageListResponse>> pageList(UserInfoPageList dto);

    /**
     * <p>
     *     insert user
     * </p>
     * @param userInfo object
     * @return true / false
     */
    public boolean insert(UserInfo userInfo);

    /**
     * <p>
     *     update userInfo
     * </p>
     * @param dto
     * @return
     */
    public boolean update(UserInfoUpdateDTO dto);


    /**
     * <pre>
     *     select limit 1
     * </pre>
     * @param id user - id
     * @return object
     */
    public UserInfoGetById getById(Long id);

    /**
     * <p>
     *     delete user
     * </p>
     * @param userId user -id
     * @return true / false
     */
    public boolean delete(List<Long> userId);

    /**
     * <p>
     *     用户授权
     * </p>
     * @param userId  用户id
     * @param roleIds 角色集
     * @return
     */
    public boolean userAuthorize(Long userId,List<Long> roleIds);


    /**
     * <p>
     *     根据用户id查询该用户有哪些权限
     * </p>
     * @param userId  用户id
     * @return
     */
    public List<String> getPermission(Long userId);


    /**
     * <pre>
     *     根据用户id查询该用户的左侧目录树结构
     * </pre>
     * @param userId 用户id
     * @return 结果集
     */
    public List<MenuTree> getMenuTree(UserMenusDTO dto);


}
